iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 13
1
Mobile Development

程式初學:Android與Kotlin系列 第 13

Day 13--SharedPreferences 簡單資料儲存

  • 分享至 

  • xImage
  •  

除了使用Room資料庫儲存以外,若有時候只是比較簡單的資料要存
可使用SharedPreferences
需注意僅能存基本型態的資料,例如Int,String...等

這會生成一個在裝置中的檔案,裡面以key-value記錄我們的資料

getSharedPreferences

主要需建立一個SharePreferences的Class
取得getSharedPreferences("參數1", 參數2)的實例

  • 參數1:資料存檔的檔案名稱(須爲String),此處會產生一個Total.xml
    若檔案已存在則使SharedPreferences指向該檔案
  • 參數2:檔案讀取權限(Int),通常設爲0,也就是MODE_PRIVATE
    僅供此app存取
private val pref = context.getSharedPreferences("Total", Context.MODE_PRIVATE)

edit

getSharedPreferences只是單純的讀取資料
要對資料進行新增或刪除等編輯動作,須要再呼叫edit()
可設一變數

private val editor = pref.edit()

edit()包含幾種方法

  • commit():直接將修改的結果寫入檔案
  • apply():修改記憶體中的暫存資料,並以非同步式寫入檔案
  • put基本資料型態(key, value):boolean, float, int, long, String, Set<String>
  • remove(key)
  • clear():全部清除

新增,讀取,刪除

所以可根據以上的功能,來建立相關的方法

//新增
    fun saveData(data: String) {
        editor.putString("key", data).apply()
    }
//讀取
    fun getData(): String? {
        return pref.getString("key", "目前沒有資料")
    }
//刪除
    fun delete() {
        editor.clear().commit()
    }
  • 新增,刪除:是用edit()呼叫的方法
  • 讀取:用getSharedPrefenrences呼叫getString(參數1, 參數2)
    參數1就是edit().putString所使用的key,會取得這個key所對應的資料
    參數2是設定若沒有取得資料時,要回傳什麼

簡單範例如下

class SharedPreferences(context: Context) {
    //    透過 Context 的 getSharedPreferences 方法取得實例
    private val pref = context.getSharedPreferences("Total", Context.MODE_PRIVATE)
    private val editor = pref.edit()


    fun saveData(data: String) {
        editor.putString("key", data).apply()
    }

    fun getData(): String? {
        return pref.getString("key", "目前沒有資料")
    }

    fun delete() {
        editor.clear().commit()
    }
}
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val pref = SharedPreferences(this)
        
        tv_data.text = pref.getData()

        btn_save.setOnClickListener {
            if (!ed_data.text.isNullOrEmpty())
                pref.saveData(ed_data.text.toString())
            tv_data.text = pref.getData()
        }

        btn_delete.setOnClickListener {
            pref.delete()
            tv_data.text = pref.getData()
        }
    }
}

以下可以看到當資料儲存後,app重開就有讀取到

參考
https://developer.android.com/training/data-storage/shared-preferences

https://spicyboyd.blogspot.com/2018/04/appandroid-sharedpreferences.html


上一篇
Day 12--Fragment Navigation
下一篇
Day 14--Intent Activity,Back Stack
系列文
程式初學:Android與Kotlin30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言